
package view;

import control.Comando;
import control.Controle;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.*;
import model.*;


public class InterfaceGerenciarAlbum implements Comando {

    @Override
    public void executar() {
        
        Artista artistaAtual = (Artista) Controle.usuarioAtual;
        
        
        if (artistaAtual.getAlbuns().size() == 0) {JOptionPane.showMessageDialog(null, "Você não possui álbuns.");}
        else {
                
            HashMap albuns = new HashMap();      

            int valor = 0;
            ArrayList<String> opcoes = new ArrayList();
            
            Iterator<Album> it = artistaAtual.getAlbuns().iterator();        

            while(it.hasNext())
            {
                Album obj = it.next();
                
                String chave = Integer.toString(valor) + " | " + obj.getTitulo();
                opcoes.add(chave);
                albuns.put(chave, obj);

                valor++;
            }
            
            opcoes.add("Voltar");
            albuns.put("Voltar", null);

            String retorno =  Controle.getInput("Escolha um Álbum:", "Gerenciar Álbuns", opcoes.toArray());
            
            if (albuns.get(retorno)!=null){
            
                Album albumSelecionado = (Album)albuns.get(retorno); 

                Object[] opcoes2 = {"Adicionar Música", "Editar Título", "Editar Ano", "Editar Genero"};
                HashMap controleOp2 = new HashMap();
                controleOp2.put("Editar Ano", 1);
                controleOp2.put("Editar Genero", 2);
                controleOp2.put("Editar Título", 4);
                controleOp2.put("Adicionar Música", 3);

                String opcaoSelecionada = Controle.getInput("Escolha uma Opção: ", "SongLoad", opcoes2);

                switch ((Integer)controleOp2.get(opcaoSelecionada)){

                    case 4: {
                        //System.out.println("Editar Titulo");

                        String novoNome = Controle.getInput("Titulo Atual: \""+albumSelecionado.getTitulo() +"\"\nDigite o novo título do Álbum", "Gerenciar Álbum");
                        if (artistaAtual.getAlbuns().contains(new Album(novoNome, artistaAtual))){
                            JOptionPane.showMessageDialog(null, "Nome já utilizado");
                        }else {
                            albumSelecionado.setTitulo(novoNome);        
                        }
                    }break;

                    case 1: {
                        //System.out.println("Editar Ano");

                        int novoAno = Controle.getInputNum("Ano Atual: \""+albumSelecionado.getAno() +"\"\nDigite o novo ano do Álbum", "Gerenciar Álbum");
                        albumSelecionado.setAno(novoAno);        

                    }break;                    

                    case 2: {
                        //System.out.println("Editar Genero");

                        String novoGenero = Controle.getInput("Genero Atual: \""+albumSelecionado.getGenero() +"\"\nDigite o novo gênero do Álbum", "Gerenciar Álbum");
                        if (novoGenero.isEmpty()){
                            JOptionPane.showMessageDialog(null, "Campo Vazio");
                        }else {
                            albumSelecionado.setGenero(novoGenero);        
                        }
                    }break;

                    case 3: {
                        //System.out.println("Adicionar musica");

                        albuns = new HashMap(); 
                        valor = 0;
                        opcoes = new ArrayList();

                        ArrayList<Musica> musicasAux = (ArrayList)artistaAtual.getMusicas().clone(); //
                        musicasAux.removeAll((Collection)albumSelecionado.getMusicas());
                        if (musicasAux.size() == 0){JOptionPane.showMessageDialog(null, "Este Álbum já contém todas as suas musicas.");}
                        else{
                            Iterator<Musica> it2 = musicasAux.iterator();   

                            while(it2.hasNext())
                            {
                                Musica obj = it2.next();

                                String chave = Integer.toString(valor) + " - " + obj.getTitulo();
                                opcoes.add(chave);
                                albuns.put(chave, obj);

                                valor++; 
                            }
                            retorno =  Controle.getInput("Escolha uma música:", "Gerenciar Álbuns",opcoes.toArray());
                            Musica musicaSelecionada = (Musica)albuns.get(retorno); 

                            albumSelecionado.addMusica(musicaSelecionada);
                            musicaSelecionada.addAlbum(albumSelecionado);
                        }

                    }break;                    


                }
            }
            
        }
    
    }
}
